<!DOCTYPE html>
<html>

<head>
    <meta charset="utf-8">
    <link rel="stylesheet" href="../css/bootstrap.min.css">
    <link rel="stylesheet" href="../css/wings.css">
    <meta name="viewport" content="width=device-width, initial-scale=1.0" charset="utf-8">
    <title>谭滨瀚的个人主页</title>
</head>

<body>
    <div>
        <nav class="navbar navbar-dark bg-dark flex-md-nowrap p-0 shadow">
            <a class="navbar-brand col-sm-3 col-md-2 mr-0" href="#">Blogs</a>
        </nav>
    </div>
    <div class="container-fluid">
        <div class="row justify-content-center">
            <nav class="icon col-md-2  d-none d-md-block bg-light" style="min-width:0px!important;">
                <div>
                    <div class="jumbotron">
                        <img src="../img/touxiang.jpg" class="rounded-circle d-block mx-auto" style="width:50px;" />
                        <p class="text-center text-info"><strong>谭滨瀚的个人主页</strong></p>
                        <p class="text-center font-weight-light">Compiled and Designed by Wings</p>
                    </div>
                    <div class="col-md-auto">
                        <ul class="nav flex-column ">
                            <li class="nav-item scale-1-1">
                                <a class="nav-link text-center" href="../index.html">
                                    <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewbox="0 0 24 24"
                                        fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round"
                                        stroke-linejoin="round" class="feather feather-home">
                                        <path d="M3 9l9-7 9 7v11a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z"></path>
                                        <polyline points="9 22 9 12 15 12 15 22"></polyline>
                                    </svg>
                                    <span class="align-middle">Pages</span>
                                </a>
                            </li>
                            <li class="nav-item scale-1-1">
                                <a class="nav-link text-center" href="Blogs.html">
                                    <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewbox="0 0 24 24"
                                        fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round"
                                        stroke-linejoin="round" class="feather feather-file">
                                        <path d="M13 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V9z"></path>
                                        <polyline points="13 2 13 9 20 9"></polyline>
                                    </svg>
                                    Blogs
                                </a>
                            </li>
                            <li class="nav-item scale-1-1">
                                <a class="nav-link text-center" href="Friend.html">
                                    <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewbox="0 0 24 24"
                                        fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round"
                                        stroke-linejoin="round" class="feather feather-users">
                                        <path d="M17 21v-2a4 4 0 0 0-4-4H5a4 4 0 0 0-4 4v2"></path>
                                        <circle cx="9" cy="7" r="4"></circle>
                                        <path d="M23 21v-2a4 4 0 0 0-3-3.87"></path>
                                        <path d="M16 3.13a4 4 0 0 1 0 7.75"></path>
                                    </svg>
                                    Friends
                                </a>
                            </li>
                            <li class="nav-item scale-1-1">
                                <a class="nav-link text-center" href="Contact.html">
                                    <svg width="24" height="24" viewbox="0 0 18 18" version="1.1"
                                        xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"
                                        class="si-glyph si-glyph-phone-number">
                                        <!-- Generator: Sketch 3.0.3 (7891) - http://www.bohemiancoding.com/sketch -->
                                        <title>129</title>

                                        <defs></defs>
                                        <g stroke="currentColor" stroke-width="1" stroke-linecap="round"
                                            stroke-linejoin="round" fill="none" fill-rule="evenodd">
                                            <g>
                                                <g>
                                                    <path
                                                        d="M15.924,3.779 C15.924,-0.037 9.787,0.09 7.637,0.09 C5.485,0.09 0.038,0.136 0.038,3.953 L3.947,3.953 C3.947,3.926 3.951,2.759 3.951,2.996 C3.951,2.558 4.43,1.969 5.504,1.969 L10.517,1.969 C11.563,1.969 12.054,2.558 12.054,2.996 L12.054,2.996 C12.054,3.15 12.062,3.923 12.062,3.953 L15.922,3.953 C15.922,3.94 15.924,3.791 15.924,3.779 L15.924,3.779 Z"
                                                        class="si-glyph-fill"></path>
                                                    <path
                                                        d="M4.987,9.338 C4.987,9.679 4.701,9.955 4.349,9.955 L3.652,9.955 C3.299,9.955 3.013,9.679 3.013,9.338 L3.013,8.662 C3.013,8.321 3.299,8.045 3.652,8.045 L4.349,8.045 C4.701,8.045 4.987,8.321 4.987,8.662 L4.987,9.338 L4.987,9.338 Z"
                                                        class="si-glyph-fill"></path>
                                                    <path
                                                        d="M12.975,9.345 C12.975,9.698 12.69,9.983 12.336,9.983 L11.64,9.983 C11.287,9.983 11.002,9.698 11.002,9.345 L11.002,8.648 C11.002,8.295 11.287,8.01 11.64,8.01 L12.336,8.01 C12.69,8.01 12.975,8.295 12.975,8.648 L12.975,9.345 L12.975,9.345 Z"
                                                        class="si-glyph-fill"></path>
                                                    <path
                                                        d="M8.986,9.349 C8.986,9.702 8.701,9.987 8.348,9.987 L7.65,9.987 C7.298,9.987 7.013,9.702 7.013,9.349 L7.013,8.652 C7.013,8.299 7.298,8.014 7.65,8.014 L8.348,8.014 C8.701,8.014 8.986,8.299 8.986,8.652 L8.986,9.349 L8.986,9.349 Z"
                                                        class="si-glyph-fill"></path>
                                                    <path
                                                        d="M4.962,12.336 C4.962,12.689 4.681,12.974 4.334,12.974 L3.648,12.974 C3.3,12.974 3.019,12.689 3.019,12.336 L3.019,11.639 C3.019,11.285 3.3,11 3.648,11 L4.334,11 C4.681,11 4.962,11.285 4.962,11.639 L4.962,12.336 L4.962,12.336 Z"
                                                        class="si-glyph-fill"></path>
                                                    <path
                                                        d="M12.943,12.346 C12.943,12.694 12.668,12.974 12.326,12.974 L11.65,12.974 C11.308,12.974 11.033,12.694 11.033,12.346 L11.033,11.66 C11.033,11.311 11.308,11.031 11.65,11.031 L12.326,11.031 C12.668,11.031 12.943,11.311 12.943,11.66 L12.943,12.346 L12.943,12.346 Z"
                                                        class="si-glyph-fill"></path>
                                                    <path
                                                        d="M8.982,12.346 C8.982,12.694 8.698,12.974 8.345,12.974 L7.648,12.974 C7.295,12.974 7.01,12.694 7.01,12.346 L7.01,11.66 C7.01,11.311 7.295,11.031 7.648,11.031 L8.345,11.031 C8.698,11.031 8.982,11.311 8.982,11.66 L8.982,12.346 L8.982,12.346 Z"
                                                        class="si-glyph-fill"></path>
                                                    <path
                                                        d="M4.993,15.347 C4.993,15.689 4.707,15.965 4.355,15.965 L3.658,15.965 C3.305,15.965 3.019,15.689 3.019,15.347 L3.019,14.671 C3.019,14.33 3.305,14.054 3.658,14.054 L4.355,14.054 C4.707,14.054 4.993,14.33 4.993,14.671 L4.993,15.347 L4.993,15.347 Z"
                                                        class="si-glyph-fill"></path>
                                                    <path
                                                        d="M12.975,15.357 C12.975,15.711 12.69,15.996 12.336,15.996 L11.64,15.996 C11.287,15.996 11.002,15.711 11.002,15.357 L11.002,14.66 C11.002,14.307 11.287,14.022 11.64,14.022 L12.336,14.022 C12.69,14.022 12.975,14.307 12.975,14.66 L12.975,15.357 L12.975,15.357 Z"
                                                        class="si-glyph-fill"></path>
                                                    <path
                                                        d="M8.982,15.357 C8.982,15.711 8.703,15.996 8.355,15.996 L7.669,15.996 C7.321,15.996 7.042,15.711 7.042,15.357 L7.042,14.66 C7.042,14.307 7.321,14.022 7.669,14.022 L8.355,14.022 C8.703,14.022 8.982,14.307 8.982,14.66 L8.982,15.357 L8.982,15.357 Z"
                                                        class="si-glyph-fill"></path>
                                                </g>
                                                <path
                                                    d="M0.992,5.973 L3.039,5.973 C3.039,5.973 3.746,6.201 3.926,5 L0.067,5 C0.234,6.113 0.992,5.973 0.992,5.973 L0.992,5.973 Z"
                                                    class="si-glyph-fill"></path>
                                                <path
                                                    d="M12.115,5 C12.324,6.053 13.078,5.973 13.078,5.973 L14.969,5.973 C14.969,5.973 15.727,5.984 15.912,5 L12.115,5 L12.115,5 Z"
                                                    class="si-glyph-fill"></path>
                                            </g>
                                        </g>
                                    </svg>
                                    Contact
                                </a>
                            </li>
                            <li class="nav-item scale-1-1">
                                <a class="nav-link text-center" href="Calendar.html">

                                    <svg width="24" height="24" viewbox="0 0 18 18" version="1.1"
                                        xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"
                                        class="si-glyph si-glyph-calendar-1">
                                        <!-- Generator: Sketch 3.0.3 (7891) - http://www.bohemiancoding.com/sketch -->
                                        <title>1115</title>

                                        <defs></defs>
                                        <g stroke="currentColor" stroke-width="1" stroke-linecap="round"
                                            stroke-linejoin="round" fill="none" fill-rule="evenodd">
                                            <g>
                                                <path
                                                    d="M13,0.031 L13,1 L11,1 L11,0.031 L5,0.031 L5,1 L3,1 L3,0.031 L0,0.031 L0,16 L16,16 L16,0.031 L13,0.031 L13,0.031 Z M14.029,14.008 L1.955,14.008 L1.955,4.938 L14.029,4.938 L14.029,14.008 L14.029,14.008 Z"
                                                    class="si-glyph-fill"></path>
                                                <path
                                                    d="M6.027,7.957 L5.047,7.957 L5.047,7.016 L6.949,7.016 L6.949,11.954 L6.027,11.954 L6.027,7.957 L6.027,7.957 Z"
                                                    class="si-glyph-fill"></path>
                                                <path
                                                    d="M10.027,7.957 L9,7.957 L9,7.016 L10.953,7.016 L10.953,11.954 L10.027,11.954 L10.027,7.957 L10.027,7.957 Z"
                                                    class="si-glyph-fill"></path>
                                            </g>
                                        </g>
                                    </svg>
                                    Calendar
                                </a>
                            </li>
                        </ul>
                    </div>
                </div>
            </nav>
            <main role="main" class="col-md-9 ml-sm-auto col-lg-10 px-4">
                <div class="jumbotron">
                    <h1 class="text-center">狗屁不通文章生成器与GPT2</h1>
                    <p class="para">最近，一个名字相当接地气的“狗屁不通”文章生成器（BullshitGenerator）火了，截至目前 GitHub 上 Star 数已超过
                        3200，还上了微博热搜。这个神器可以生成各种各样奇葩文章，比如领导专用“彩虹屁”万字长文。只有你想不到，没有这个神器写不成的文章。但是，生成的文章确实也是“狗屁不通”。
                    </p>

                </div>
                <hr>
                <p class="para">话说，BullshitGenerator
                    这个项目最初起源于知乎上一位网友的提问：“学生会退会申请六千字怎么写？”，本来很简单的一个问题，但是回答中很多跑偏题的，于是本项目的贡献者之一表示看不下去了，并“随便写了个项目”：狗屁不通文章生成器，帮助这位同学写了一篇退会申请。
                    用 Python 生成的这篇文章长这样：</p>
                <img src="../img/tuihui.jpg">
                <hr>
                <p class="para">由于下拉十多下没滑到底，让人失去了截全图的耐心，文章也实在看不下去，因为它真的是一篇逻辑不通的 bullshit。我也用这个生成器尝试了几个大家都会思考的主题，比如：</p>

                <div class="row">
                    <img src="../img/baofu.jpg" style="width:10%; height:10%;">
                    <img src="../img/shangban.jpg" style="width:10%; height:10%;">
                    <img src="../img/fangtu.jpg" style="width:10%; height:10%;">
                </div>
                <hr>
                <p class="para">生成器地址：<a
                        href="https://suulnnka.github.io/BullshitGenerator/index.html">https://suulnnka.github.io/BullshitGenerator/index.html</a>
                </p>
                <p class="para">
                    但是关于生成器的工作原理，相信很多人是比较感兴趣的。</p>
                <p class="para">
                    运行原理是什么？</p>
                <p class="para">
                    据贡献者介绍，本项目最初的目的是用于中文文字 GUI 开发时测试文本渲染，用 Python 3 版本写成，目前共有 7 位贡献者。 </p>
                <p class="para">
                    鉴于目前 AI 用于文字生成非常流行，这个项目是否也用到了 AI 相关算法呢？答案是否定的，作者表示，BullshitGenerator
                    没有用到任何自然语言处理相关算法，只是简单地撸代码就可以达到效果。
                </p>
                <blockquote>“狗屁不通生成器”是一个文本生成器，用来生成一些中文文字用于 GUI 开发时测试文本渲染。由于此项目的目的只是用于 GUI
                    开发时测试文本渲染，所以对文本的连贯性和含义要求不高，这也就是“狗屁不通”的含义了</blockquote>
                <br>
                <h2>是否能与 GPT 2 结合？</h2>
                <p class="para">issue 中有人发表了对这个项目的评价：</p>
                <img src="../img/evaluation.jpg">
                <p class="para">可以看到，大家对这个项目的评价还是以正面居多。其中，有人提到了希望与 GPT 2 进行整合：</p>
                <img src="../img/evaluation2.jpg">
                <p class="para">很快有人对这个想法提出疑问，比如算力的问题。那么，BullshitGenerator 与 GPT 2 整合的想法可行吗？或者是否有必要？</p>
                <blockquote>个人觉得“狗屁不通生成器”与“GPT”结合意义不大，这两个项目的目标和特点差异很大。“狗屁不通生成器”是为了快速用来生成一些中文文字用于 GUI
                    开发时测试文本渲染，而“GPT”文本生成器目标是生成高质量连贯文本，“GPT”的特点是模型大速度慢质量高，并不满足“狗屁不通生成器”的设计需求。 </blockquote>
                <p class="para">GPT 2 是 OpenAI 推出的一个中文生成模型，由加拿大工程师 Adam King 制作的网站上，任何人都能调教简化版的
                    GPT-2，它能够识别从新闻、歌词、诗歌、食谱、代码的各种输入，甚至还为《复仇者联盟》写了一个细节丰富的续集，内容可读性相当高。</p>
                <img src="../img/GPT2.jpg">
                <p class="para">令人振奋的是，这个史上最强的 NLP 模型今天正式全部开源，OpenAI 正式放出了 GPT 2 的最后一部分代码。</p>
                <p class="para">开源地址：<a href="https://github.com/openai/gpt-2">https://github.com/openai/gpt-2</a>。 </p>
                <p class="para">作为 GPT 2 分段发布中的最后一轮，此次公开的完整 GPT-2 包含 15 亿条参数，其中包含用于检测 GPT-2 模型输出的全部代码及模型权重。</p>
                <p class="para">当然，关于 GPT 2 的讨论仍在继续，比如它的实用性，生成假新闻被滥用引发的安全问题等，都是后续还有待改善的关键点。</p>
                <p class="para">此外，GPT 2 还有一个中文版本，相比之下，GPT2 与 BullshitGenerator 不同之处在于前者使用了 BERT 或 BPE
                    编译器，但同样不需要算法基础，只要简单 clone 运行即可，技术上的实现难度更大一些。</p>
                <blockquote>“GPT”是比较标准的自回归语言模型了，Transformer 出现前都是通过 RNN 的方法，之前比较火的“CharRNN”深度学习作诗与作曲都属于这个范畴。“GPT”将
                    Transformer 替换了 RNN，使得提取特征的能力与运算速度都得到很大提升，当然使用大规模数据训练模型也是“GPT”效果好的一个重要因素。</blockquote>
                <blockquote>相较于“GPT”，“狗屁不通生成器”实现就简单很多，主要代码就几十行，基本上只用到了Python
                    编程技术。体现在文本的连贯性和含义上，虽然生成文本的质量不高，但它也满足了生成一些中文文字用于 GUI 开发时测试文本渲染的要求。</blockquote>
                <p class="para">GPT2 中文项目：<a
                        href="https://github.com/Morizeyao/GPT2-Chinese">https://github.com/Morizeyao/GPT2-Chinese </a>
                </p>
                <h2>文本生成的未来</h2>
                <p class="para">GPT 2 的横空出世让大家看到了 AI 在文本生成方面的潜力。正如 Open AI 官博所说，虽然 GPT 2 还面临检测等方面的挑战，但它的潜力还很大， Open AI
                    表示，未来这个模型还将继续进行改进，他们期望语言模型能够在性能上有更大的提升，以此提供更高的输出质量和准确性。</p>
                <p class="para">BullshitGenerator 项目也公布了下一步计划:</p>
                <ol>
                    <li>
                        <p><span>防止文章过于内容重复</span></p>
                    </li>
                    <li>
                        <p><span>加入更多啰嗦话.</span></p>
                    </li>
                    <li>
                        <p><span>加入马三立&lt;开会迷&gt;里的内容</span></p>
                    </li>
                    <li>
                        <p><span>加入手写体直接渲染出图片的功能(仅仅用于测试本人的打印机是否工作正常, 请勿做它用).</span></p>
                    </li>
                </ol>
                <p>大胆设想一下，日后类似于 BullshitGenerator 这样的文本生成器将进一步改进，那么是否在没有 AI
                    算法的参与下，仅凭简单的代码就能够生成高质量的文本（虽然可能性几乎为零，但如果可以实现将是颠覆性的成果）？从另一个思路来讲，以 GPT2 为代表的 NLP
                    模型现在已经可以生成以假乱真的文本，未来又该如何克服目前的挑战，生成更高质量的作品，同时能够保证安全？是否未来有一天，文本生成技术或许真的会取代一部分人类的工作？这些问题都值得深思。
                </p>
            </main>
        </div>

    </div>
    <script src="../js/jquery-3.3.1.slim.min.js"></script>
    <script src="../js/popper.min.js"></script>
    <script src="../js/bootstrap.js"></script>

</body>

</html>